package com.mezz.bones.im.logic.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * IM会话列表
 * </p>
 *
 * @author mezz
 * @since 2024-12-20
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "chat_conversation", autoResultMap = true)
@ApiModel(value="ChatConversation对象", description="IM会话列表")
public class ChatConversation implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    /**
     * @see com.mezz.bones.im.common.enums.ChannelTypeEnum
     */
    @ApiModelProperty("user2user用户对用户 user2srm用户对供应商 user2saas用户对平台 srm2saas供应商对平台")
    private String channelType;

    @ApiModelProperty(value = "会话所属用户")
    private String userId;

    /**
     * @see com.mezz.bones.im.common.enums.UserTypeEnum
     */
    @ApiModelProperty("用户端类型 1user-用户 srm-供应商 saas-平台端")
    private String userType;

    @ApiModelProperty(value = "对端用户ID | 群聊ID")
    private String peerId;

    @ApiModelProperty("用户类型 user-用户 srm-供应商 saas-平台端 group-群组")
    private String peerType;

    @ApiModelProperty("客服业务 子号(供应商、平台客服ID) 1母号(供应商、平台 主体信息 ID) 非客服业务 -1")
    private String relationId;

    /**
     *               userId     userType peerId peerType  relationId    relationType
     * 用户-用户       用户ID       user    对端用户ID  user    -1           -1
     * 用户-供应商客服  用户ID       user    供应商ID    srm     srm客服ID     0子号
     * 供应商客服-用户  srm客服ID    srm     用户ID      user    供应商ID      1母号
     * 用户-平台       用户ID       saas    saas客服ID  saas    saas客服ID   0子号
     * 平台-用户       saas客服ID   saas    用户ID      user    0           1母号
     */
    @ApiModelProperty("客服业务 0子号(供应商、平台客服信息) 1母号(供应商、平台 主体信息) 具体数值映射到relation_id 非客服业务 -1")
    private Integer relationType;

    /**
     * 会话每次有新消息 更新此游标ID值 用于会话列表 分页游标数据
     * 不能使用更新时间(比如未读消息重置会重置更新时间 但并不影响会话列表的排序 只有会话中有新消息时才需更新此游标数据)
     */
    @ApiModelProperty("数据流分页游标ID")
    private Long cursorId;

    @ApiModelProperty(value = "user_id peer_id 自然排序 通过$符号连接")
    private String sessionId;

    /**
     * @see com.mezz.bones.im.common.enums.SessionTypeEnum
     */
    @ApiModelProperty(value = "1单聊 2群聊")
    private Integer sessionType;

    @ApiModelProperty(value = "最后一条消息KEY")
    private String lastMsgKey;

    @ApiModelProperty(value = "最后一条消息内容(格式化消息)")
    private String lastMsgContent;

    @ApiModelProperty(value = "最后一条消息序列号")
    private String lastMsgSeq;

    @ApiModelProperty("peer用户对user用户消息最后一次已读的消息序列号")
    private String lastPeerReadSeq;

    @ApiModelProperty("user用户对peer用户消息最后一次已读的消息序列号")
    private String lastUserReadSeq;

    @ApiModelProperty(value = "最后一条消息时间")
    private Date lastMsgTime;

    @ApiModelProperty(value = "未读数")
    private Integer unreadCount;

    @ApiModelProperty(value = "1置顶 0否")
    private Integer topFlag;

    @ApiModelProperty(value = "置顶时间")
    private Date topTime;

    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    @ApiModelProperty(value = "更新时间")
    private Date updateTime;

    @ApiModelProperty(value = "1隐藏(用户端操作) 0否")
    private Integer hidden;

    @ApiModelProperty(value = "用户操作隐藏的时间")
    private Date hiddenTime;

    @ApiModelProperty(value = "系统删除 1已删 0否")
    private Integer isDel;
}
